/**
 * 扁平化树形任务结构
 * 
 * @description 将树形任务结构扁平化为一维数组，便于渲染，支持展开/折叠联动
 * @param ganttData - 甘特图数据对象
 * @returns 扁平化后的行数组
 */

import { computed, ComputedRef } from 'vue'
import { GanttData, FlattenedRow, TaskNode } from './types'

export function useFlattenedRows(
  ganttData: GanttData
): ComputedRef<FlattenedRow[]> {
  return computed(() => {
    // 使用触发器强制重新计算（访问以建立响应式依赖）
    void ganttData._updateTrigger
    
    const rows: FlattenedRow[] = []
    
    const traverseForFlattenRows = (nodes: TaskNode[], level: number) => {
      nodes.forEach(node => {
        const isGroup = !!(node.children && Array.isArray(node.children))
        // 不使用展开运算符，直接添加引用以保持响应式
        rows.push({ 
          ...node, 
          level, 
          isGroup,
          // 显式访问这些属性以确保响应式追踪
          expanded: node.expanded,
          checked: node.checked
        })
        if (node.expanded && isGroup && node.children) {
          traverseForFlattenRows(node.children, level + 1)
        }
      })
    }
    
    // 确保追踪 rawTasks 的变化
    if (ganttData.rawTasks && ganttData.rawTasks.length > 0) {
      traverseForFlattenRows(ganttData.rawTasks, 0)
    }
    
    return rows
  })
}
